Passer au contenu principal

Oct: Alpha released!

· 12 minutes de lecture
Gabriel T. Nardy
nanos world developer (SyedMuhammad)

Nous sommes fiers de vous présenter...

La grande liste de mise à jours de l'Alpha!

Pensées initiales

Merci à tout le monde pour tout le soutien que vous avez apporté le mois dernier ! Notre communauté a beaucoup évolué et il est agréable de voir à quel point elle devient sympathique et amicale 🥰!

La séance de Playtest du dimanche était incroyable! Nous avons pu très bien tester la stabilité du jeu. Je peux dire que la plupart des plantages que nous avons eus étaient liés à des problèmes d'intégration externes (WebUI ou Unreal lui-même), ce qui montre une grande maturité de notre système Core. Je pense à le faire plus souvent, c'était très amusant de jouer au mode Halloween et de tester les modes de jeu communautaires !

À partir de maintenant, toutes les mises à jour commenceront à être versionnées (enfin !), Les petites mises à jour/changements sans rupture recevront une version PATCH et les changements de rupture recevront une version MINOR.

note

Le changelog suivant contient toutes les fonctionnalités depuis la dernière version officielle de la 0.73.0. Bon nombre des prochains articles étaient déjà dans la branche à la pointe de la technologie.

Matériaux

Maintenant, Nanos World, supporte les assets de matériaux! 🎨

Cela signifie que vous pouvez configurer vos propres matériaux dans votre Assets.toml et les référencer en utilisant les méthodes Paintable!

La fonction :SetDefaultMaterial() a été remplacée par :SetMaterial(). Vous pouvez voir une liste de tous les matériaux par défaut ici.

De plus, il est désormais possible de prendre le matériau d'une WebUI pour l'appliquer sur n'importe quelle surface (voir ci-dessous) !

Certaines méthodes existantes sont en train de subir une refonte en raison de, par ex. Les Pickables ont obtenu une nouvelle méthode :SetCrosshairMaterial(), pour que vous puissiez définir le Crosshair à partir d'un matériau (et non à partir d'une liste prédéfinie), aussi tous les vieux Crosshair ont été convertis en matériaux que vous pouvez trouver ici.

Interface Web améliorée

L'interface WEB (WebUI) à récemment reçu plusieurs améliorations, incluant la possibilité de lancer un audio ou une vidéo HTML5 ! 📽

attention

Nous utilisons une version bêta d'Ultralight, qui prend en charge Audio et Vidéo, des plantages se produiront, aussi l'Audio est actuellement en 2D seulement. Ultralight travaille sur une solution pour que je puisse implémenter l'audio 3D.

Le constructeur WebUI a reçu de nouveaux paramètres : is_transparent, auto_resize, width et height. La largeur et la hauteur ne seront utilisées que si le redimensionnement automatique est OFF, ceci est utile si vous voulez faire apparaître une interface WebUI pour l'utiliser comme Material sur n'importe quelle surface (et ne pas vouloir que ce soit la taille de l'écran).

Il a également reçu de nouvelles méthodes : :SetFreeze(), :Resize() et :SetAutoResize().

Un nouveau moteur de recherche a été ajouté, améliorant la façon dont il peut charger vos fichiers .html, ils sont maintenant consultés dans l'ordre suivant :

  1. Relatif à dossier-courant/
  2. Relatif à package-courant/Client/
  3. Relatif à package-courant/
  4. Relatif à Packages/

Il est maintenant possible de faire apparaître un matériau à partir d'un WebUI, qui rend dynamique et automatiquement en toutes les surfaces : :SetMaterialFromWebUI() (méthode from Actors).

Acteurs

Nouveaux ajouts pour Acteurs:

  • Ajout d'une nouvelle méthode pour tous les acteurs : :SetLifeSpan(time) qui détruira automatiquement cet acteur après temps secondes.
  • Ajout d'une nouvelle méthode pour tous les acteurs : :IsBeingDestroyed() qui retournera si cet acteur est détruit (utile pour vérifier à l'intérieur d'autres événements tels que Drop ou Ungrab).
  • Ajout d'un nouveau paramètre pour tous les acteurs :AttachTo() méthode : lifespan_when_detached, qui détruira l'acteur après temps secondes après qu'il soit détaché.
  • Maintenant l'événement TakeDamage a un nouvel argument : causer (l'objet/acteur qui a causé les dégâts). Ajout de nouveaux types de dégâts : RunOverVehicle et RunOverProp.
  • Maintenant l'événement Hit a de nouveaux arguments : impact_force, normal_impulse, impact_location et velocity.
  • Maintenant, :SetLocation() va essayer de trouver le meilleur endroit pour téléporter l'Acteur (pour éviter les collisions).

Personnage

Nouveaux ajouts pour Personnages:

Additions/améliorations des méthodes de caractères :

  • Ajout de plusieurs nouveaux Getters depuis ses propriétés.
  • Ajout de :SetDamageMultiplier() change le multiplicateur d'endommagement en fonction de l'os endommagé.
  • Ajout de :SetHiddenBone() pour rendre invisible n'importe quelle partie du corps.
  • Ajout de :SetJumpZVelocity() pour faire sauter le personnage plus haut.
  • Improved :PlayAnimation() got new parameters (blend times, loop and play rate), and now it supports loading any type of animation (Montage or Sequence).
  • Removed :SetInitialLocation(), it has been replaced with :Respawn().

Character Events additions/improvements:

  • Added AttemptEnterVehicle called when Character tries to enter a vehicle, returns false to prevent it.
  • Added AttemptLeaveVehicle called when Character tries to leave a vehicle, returns false to prevent it.
  • Added AttemptReload called when Character tries to reload it's weapon, returns false to prevent it.
  • Added Interact called when Characters tries to Pick Up a Pickable or Grab a Prop.
  • Added Highlight called when Characters looks at a Prop or Pickable being able to pick up it.

Some Characters animations have been renamed from AM_ to A_ in the Default Asset Pack (as they are not Montages anymore). Also lots of new Animations have been added.

Weapons

New additions for Weapons:

Weapon Methods additions/improvements:

Additional stuff:

  • Now weapons are hidden when Characters are driving.
  • Added sounds of Shell Dropping & hitting the ground for the built-in Shell particles (this is a procedural and 100% precise sound 😉).
  • Added sounds when picking up or dropping weapons, also it will slightly throw the weapon to the front when dropping it.

Grenades

All Properties from Grenades have been deprecated, now access must be done through Methods.

We've added a special Particle for Grenades nanos-world::P_Grenade_Special which will explode different particles depending on the ground the grenade is. I.e. will explode a "grass explosion" particle if grenade is over a grass surface, and a "water explosion" particle if it's under water. Note: This particle only works for Grenades.

Sounds

New additions for Sounds:

Now it is possible to load .ogg sounds at runtime! You can store them in any Package or Asset Pack and load it using our new pattern for SpecialPath (assets://asset-pack-name/path.ogg or package://package-name/path.ogg).

Added loop_mode parameter to constructor (can loop any sound forever now).

Also, it is possible to pass .ogg using the SpecialPath in any Sound parameter.

Sound Methods additions/improvements:

Input

Added a new class: Input!

Now you can control, create and customize KeyBindings in a proper way! Exemple :

-- Registers the binding_name 'SpawnMenu' with default key 'Q'
-- This will add 'SpawnMenu' to user KeyBinding Settings automatically
Input.Register("SpawnMenu", "Q")

-- Subscribes for Pressing the key
Input.Bind("SpawnMenu", InputEvent.Pressed, function()
-- Opens the Spawn Menu
end)

-- Subscribes for Releasing the key
Input.Bind("SpawnMenu", InputEvent.Released, function()
-- Closes the Spawn Menu
end)

HTTP

Added a new class: HTTP!

Now we have a proper standalone class for making HTTP requests. Is also features Async HTTP requests (and thread safe!)

Performance Optimization

We have worked hard on performance techniques for Alpha update. Here's the highlights:

  • Now Basic Structs Vector and Rotator are automatically compressed when sending through the Network. Reducing it's size up to 90% in the best case! This was a great gain for network use.
  • A new setting was added Profiling which you can enable with --profiling on server and in Settings on Client. This will log all the time elapsed to run operations/scripting events and some other stuff in the Console.
  • Now HTTP requests (a.k.a. downloading files when joining a server) are automatically compressed, which may reduce the network usage when downloading big files!
  • Now Actors which are very far or not on screen will be synchronized/updated half the time to improve performance. We still want to tweak it and make it more aggressive on some cases.
  • The Assets Loading system have been reworked and is much faster now.
  • Small Props (radius < 200) will not collide with players or dynamic objects anymore. Also Bigger props will have CCD disabled by default (which drastically improved performance), this can be enabled in the Prop constructor.
  • Now VOIP uses Steam system, which provides a great compression and also custom settings through Shift+Tab menu.
  • Several improvements were made on our low-level Lua code to boost scripting performance.

Server

New additions to Server static class:

Client

New additions to Client static class:

Now when joining a server, a Progress Bar will be displayed in the Taskbar, and also it will Flash once the loading is done:

Console de jeu

Maintenant, il est désormais possible d'accéder à la console du Serveur, depuis votre jeu !

Si vous ouvrez celle-ci deux onglets se présenteront: Un onglet client & Un onglet server. Vous pouvez grâce à cette console en jeu, avoir la possibilité de lire les logs du serveur, ainsi qu'éxécuter des commandes.

note

Not all logs will appear in there, only the ones outputted while you are connected to the server.

Timer

New additions to Timer:

CLI

  • Now it is possible to download multiple Assets/Packages at once with CLI, just separate them by spaces, e.g.: cli assets install quaternius city-park.

Succès Steam

With Steam integration, we are making use of every feature possible it allows 😅!

And this includes the Achievements! We are counting on the support of a talented friend Esther who is drawing the amazing arts for them!

Little by little we will be creating more achievements and releasing them! We also count on your ideas for more!

Amélioration des scripts

  • Added new Searchers to Package.Require(), we now currently support 5 searchers, which are looked in the following order:

    1. Relatif à dossier-courant/
    2. Relative to current-package/Client/ or current-package/Server/ (depending on your side)
    3. Relative to current-package/Shared/
    4. Relatif à package-courant/
    5. Relatif à Packages/
  • Package.Require() now can be called in runtime and at any moment.

  • Package.RequirePackage() now will load a package as a library inside the current package, it means the package loaded will now be automatically sent to clients, and all paths it loads is relative to the package itself (and not to the one which is requiring it anymore).

  • Verbose logs will now display the current thread ID.

Packages par défaut renommés

The default Packages NanosWorldWeapons and NanosWorldVehicles were renamed to nanos-world-weapons and nanos-world-vehicles, following the new correct pattern for Packages and Assets names. Including them now should be made like Package.RequirePackage("nanos-world-weapons"), the usage keeps the same (NanosWorldWeapons.AK47()).

Changements Général

  • Cable got new methods: :GetAttachedStartTo() and :GetAttachedEndTo() to get if it's attached at any end.
  • Player got new methods: :SetVOIPVolume(), :GetSteamID(),
  • Pickables got new events: ReleaseUse, PullUse when Character pulls or releases its usage (i.e. trigger for weapons)
  • Improved the way the interact trigger enables for Pickables and Props.
  • Trigger got new method: :ForceOverlapChecking() which will checks for overlaps in the game thread and immediately dispatch events.
  • Added new methods for Quaternions (+, -, Normalize).
  • Added new method for generating a random Rotator: Rotator.Random().
  • Added lots of new Sounds, Animations, Props, Meshes in the Default Asset Pack.
  • Added Steam Login.
  • All .config files had it's tabs replaced with spaces.
  • .GetPairs() now only supports pairs.
  • Added Resolutions graphic settings.
  • Make Day button from In-game menu has been removed.
  • Added new Splash Effects when Props or objects enter the Water.
  • :GetValue() now has an additional parameter: fallback which will be returned if the value doesn't exist.
  • Probably many other things that were being added and were forgotten 😜.

Correction des bugs

  • Correction du World.SetFogDensity() qui ne fonctionnait pas.
  • Correction du Client.SetCameraLocation qui ne fonctionnait pas.
  • Correction du Actors.RotateTo() qui ne respectait pas les maths.
  • Correction du StaticMesh.GetBounds() qui ne fonctionnait pas.
  • Fixed Cables methods being able to be called on client side.
  • Fixed several Character properties not syncing.
  • Fixed a crash when changing Map at runtime.
  • Fixed Characters not reseting the life to max_health when Respawning.
  • Fixed dead ragdolls still moving around (from MoveTo()).
  • Fixed infinite recursion with LogEntry event.
  • Fixed Characters Morph Targets not syncing.
  • Fixed Discord custom integration not working sometimes.
  • Fixed a crash when a player had no Steam Profile image.
  • Fixed Server Announce checkbox being disabled when unchecked on New Game screen.
  • Fixed a crash when destroying entities from inside Interact event.
  • Fixed hell lot of other Crashes 💥. Thanks for the Crash Reports!